#include <bits/stdc++.h>

using namespace std;

static char buf[1000000],*p1=buf,*p2=buf,obuf[1000000],*p3=obuf;
#define getchar() p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++
#define putchar(x) (p3-obuf<1000000)?(*p3++=x):(fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=x)
template<typename item>
inline void read(register item &x)
{
	bool flag=false;
    x=0;register char c=getchar();
    while(c<'0'||c>'9')
	{
		if(c=='-')
		flag=true;
		c=getchar();
	}
    while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
    if(flag)
    x=-x;
}
const int Mod=147744151,MAXN=1e3+50;

long long GetPhi(long long x)
{
	long long Now=x;
	for(int i=2;i<=x/i;i++)
	{
		if(x%i==0)
		{
			while(x%i==0)
			{
				x/=i;
			}
			Now=Now/i*(i-1);
		}
	}
	if(x>1)
	{
		Now=Now/x*(x-1);
	}
	return Now;
}
int N,M,Q;
long long P,Phi;
long long Pow(long long a,long long b)
{
	long long ans=1;
	while(b)
	{
		if(b&1)
		{
			ans=(__int128)ans*a%P;
		}
		a=(__int128)a*a%P;
		b>>=1;
	}
	return ans;
}
const int PP=1e9+7;
long long GetInv(long long a)
{
	return Pow(a,Phi-1)%PP;
}
long long Sum[MAXN][MAXN],Inv[MAXN][MAXN];

long long a[MAXN][MAXN];
int OldP;

long long GetSum(int xl,int yl,int xr,int yr)
{
	return Sum[xr][yr]*Inv[xl-1][yr]%P*Inv[xr][yl-1]%P*Sum[xl-1][yl-1]%P;
}
long long GetSum2(int xl,int yl,int xr,int yr)
{
	long long Nowans=1;
	for(int i=xl;i<=xr;i++)
	{
		for(int j=yl;j<=yr;j++)
		{
			Nowans=Nowans*a[i][j]%P;
		}
	}
	return Nowans;
}

int main()
{
	freopen("tsuki.in","r",stdin);
	freopen("tsuki.out","w",stdout);
	read(N);
	read(M);
	read(P);
	Phi=GetPhi(P);
	for(int i=0;i<=N;i++)
	{
		Inv[i][0]=Sum[i][0]=1;
	}
	for(int i=0;i<=M;i++)
	{
		Inv[0][i]=Sum[0][i]=1;
	}
	for(int i=1;i<=N;i++)
	{
		for(int j=1;j<=M;j++)
		{
			read(Sum[i][j]);
			a[i][j]=Sum[i][j];
			Sum[i][j]=Sum[i][j]*Sum[i-1][j]%P*Sum[i][j-1]%P*Inv[i-1][j-1]%P;
			Inv[i][j]=GetInv(Sum[i][j]);
		}
	}

	long long ans=0;
	read(Q);
	for(int i=1;i<=Q;i++)
	{
		int xl,yl,xr,yr;
		read(xl);
		read(yl);
		read(xr);
		read(yr);

		if(Phi!=P-1)
		{
			ans=(ans+(i^(GetSum2(xl,yl,xr,yr))))%Mod;
		}
		else
		{
			ans=(ans+(i^(GetSum(xl,yl,xr,yr))))%Mod;	
		}	
	}
	printf("%lld",ans);
}
